jetcrab\parser\statements/
function.rs

1use crate::ast::{FunctionDeclaration, Node};
2use crate::lexer::TokenKind;
3use crate::parser::error::ParseResult;
4use crate::parser::Parser;
5
6impl Parser {
7    pub fn parse_function_declaration(&mut self) -> ParseResult<Node> {
8        self.advance();
9
10        let id = if self.check_identifier() {
11            Some(Box::new(self.parse_identifier()?))
12        } else {
13            None
14        };
15
16        self.expect(TokenKind::LeftParen)?;
17        let params = self.parse_parameters()?;
18        self.expect(TokenKind::RightParen)?;
19
20        let body = Box::new(self.parse_function_body()?);
21
22        let span = self.create_span_from_tokens();
23        Ok(Node::FunctionDeclaration(FunctionDeclaration {
24            id,
25            params,
26            body,
27            generator: false,
28            r#async: false,
29            span: Some(span),
30        }))
31    }
32}